/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.presentacion.tarjeta;

import com.mindbox.mueblesalpes.negocio.entity.Cliente;
import com.mindbox.mueblesalpes.negocio.entity.TarjetaCredito;
import com.mindbox.mueblesalpes.negocio.exception.ErrorTarjetaCredito;
import com.mindbox.mueblesalpes.negocio.exception.TiendaException;
import com.mindbox.mueblesalpes.negocio.persistence.TarjetaCreditoLocal;
import com.mindbox.mueblesalpes.presentacion.utils.Mensajes;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;

/**
 *
 * @author Catalina
 */

public class TarjetaCreditoBean {

    private Long id;
    private Double montoTarjeta;
    private Long idCliente;
    private boolean nuevaTarjeta = true;
    private boolean editarTarjeta = false;
    Cliente cliente;
    TarjetaCredito tarjetaCredito;
    FacesContext facescontext;

    @EJB
    private TarjetaCreditoLocal tarjetaService;
    
    /** Creates a new instance of TarjetaCreditoBean */
    public TarjetaCreditoBean() {        
    }

    @PostConstruct
    private void consultarTarjetaCredito(){
        facescontext = FacesContext.getCurrentInstance();

        cliente = (Cliente) facescontext.getExternalContext().getSessionMap().get("ClienteSeleccionado");

        try{
            tarjetaCredito = tarjetaService.getTarjetaCreditoFromIdCliente(cliente.getIdCliente());
            if (tarjetaCredito != null) {
                inicializarDatos(tarjetaCredito);
                editarTarjeta = true;
            }
        } catch(TiendaException e){
            Mensajes.asignarMensajeError(e.getMessage());
        } catch(Exception e){
            Mensajes.asignarMensajeAdvertencia("Se ha presentado un error inesperado");
        }              
    }

    private void inicializarDatos(TarjetaCredito tarjetaCredito){

        id = tarjetaCredito.getId();
        montoTarjeta = tarjetaCredito.getMontoTarjeta();
        idCliente = tarjetaCredito.getIdCliente();
        nuevaTarjeta = false;
    }


    /**
     * Método encargado de crear ó editar la tarjeta de crédito asociada
     * a un cliente
     * @return regla de navegación
     */
    public String crearTarjetaCredito(){

        try{
            if(validarCampos()){
                if(nuevaTarjeta){
                    TarjetaCredito tarjetaNueva = new TarjetaCredito();
                    tarjetaNueva.setId(id);
                    tarjetaNueva.setMontoTarjeta(montoTarjeta);

                    if(cliente != null){
                        tarjetaNueva.setIdCliente(cliente.getIdCliente());
                        tarjetaService.crearTarjetaCredito(tarjetaNueva);
                        Mensajes.asignarMensajeInfo("El valor del monto de la tarjeta ha sido creado exitosamente");
                    }
                }else{
                    if(tarjetaCredito != null){
                        tarjetaCredito.setMontoTarjeta(montoTarjeta);
                        tarjetaService.actualizarTarjetaCredito(tarjetaCredito);
                        facescontext = FacesContext.getCurrentInstance();

                        Mensajes.asignarMensajeInfo("El valor del monto de la tarjeta ha sido actualizado exitosamente");
                    }
                }
                if (facescontext.getExternalContext().getSessionMap().containsKey("ClienteSeleccionado")) {
                    facescontext.getExternalContext().getSessionMap().remove("ClienteSeleccionado");
                }
            }
        } catch(ErrorTarjetaCredito e){
            Mensajes.asignarMensajeError(e.getMensaje());
        } catch(TiendaException e){
            Mensajes.asignarMensajeError(e.getMessage());
        }catch(Exception e){
            Mensajes.asignarMensajeError("Se ha presentado un error desconocido");
        }

        return "";
    }

    public boolean validarCampos(){
        
        if(id == null ){
            Mensajes.asignarMensajeAdvertencia("Debe ingresar el número de la tarjeta");
            return false;
        } else if (montoTarjeta == null) {
            Mensajes.asignarMensajeAdvertencia("Debe ingresar el número de la tarjeta");
            return false;
        } else if (montoTarjeta == 0) {
            Mensajes.asignarMensajeAdvertencia("El monto de la tarjeta debe ser mayor a cero");
            return false;
        }
        return true;
    }
    
    /**
     * @return the id
     */
    public Long getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return the montoTarjeta
     */
    public Double getMontoTarjeta() {
        return montoTarjeta;
    }

    /**
     * @param montoTarjeta the montoTarjeta to set
     */
    public void setMontoTarjeta(Double montoTarjeta) {
        this.montoTarjeta = montoTarjeta;
    }

    /**
     * @return the idCliente
     */
    public Long getIdCliente() {
        return idCliente;
    }

    /**
     * @param idCliente the idCliente to set
     */
    public void setIdCliente(Long idCliente) {
        this.idCliente = idCliente;
    }

    public boolean isEditarTarjeta() {
        return editarTarjeta;
    }

    public void setEditarTarjeta(boolean editarTarjeta) {
        this.editarTarjeta = editarTarjeta;
    }


}
